#include "../aclib/Block.h"
#include "../aclib/BlockData.h"

namespace AC = AppliedCryptography;

template<unsigned int TBlockSize>
class MBlockData : public AC::BlockData<TBlockSize>
{
public:
	MOCK_CONST_METHOD0_T(Blocks, unsigned int());
	MOCK_CONST_METHOD0_T(LastBlockLength, unsigned int());
	MOCK_CONST_METHOD1_T(At, const AC::Block<TBlockSize>(unsigned int blockIndex));
	MOCK_CONST_METHOD1_T(doConstOperatorAccess, const AC::Block<TBlockSize>(unsigned int index));
	const AC::Block<TBlockSize> operator[](unsigned int index) const
	{
		return this->doConstOperatorAccess(index);
	};

	MOCK_METHOD1_T(At, AC::Block<TBlockSize>(unsigned int blockIndex));
	MOCK_METHOD1_T(doOperatorAccess, AC::Block<TBlockSize>(unsigned int index));
	AC::Block<TBlockSize> operator[](unsigned int index)
	{
		return this->doOperatorAccess(index);
	};
	MOCK_METHOD2_T(Add, void(AC::Block<TBlockSize> block, unsigned int len));
};

